/** 数据字典 - 制定数据字段
 * # 广告：banner_table
 * => id
 * => title         标题        varchar(32)
 * => sub_title     副标题      varchar(16)
 * => src           图片        varchar(64)
 * 文章：article_table
 * => id
 * => author        作者        varchar(16)
 * => author_src    头像        varchar(64)
 * => title         标题        varchar(32)
 * => post_time     发布时间(s) int
 * => centent       文章内容    text
 * => n_like        赞          int
 * 用户：user_table
 * => id
 * => username      用户名      varchar(32)
 * => password      密码        varchar(32)
 * => src           头像        varchar(64)
 */

const express = require('express')
const expressStatic = require('express-static')
const cookieParser = require('cookie-parser')
const cookieSession = require('cookie-session')
const fs = require('fs')
const bodyParser = require('body-parser') // 解析POST 数据
const multer = require('multer')  // 新中间件：解析POST 文件
// const jade = require('jade') // 被consolidate整合
// const ejs = require('ejs') // 被consolidate整合
const consolidate = require('consolidate')  // 新中间件：consolidate 整合模板引擎
const mysql = require('mysql')  // 新中间件：操作数据库：增删改查
const common = require('./libs/common') // 自定义模块

// 数据库链接池
const db = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: '123456789',
  database: 'blog'
})

let server = express()
server.listen(8080)

// 1、解析cookie
server.use(cookieParser('asdfasdfasdf')) // cookieParser('密钥')

// 2、使用session
let keysArr = []
for (let i = 0; i < 10000; i++) {
  keysArr.push('keys_' + Math.random())
}
server.use(cookieSession({ name: 'ssid', keys: keysArr, maxAge: 20 * 60 * 1000 })) // 放在cookie之后，因为基于cookie

// 3、post
// 解析数据
server.use(bodyParser.urlencoded({ extended: false }))
// 解析文件
server.use(multer({ dest: './www/upload' }).any())

// 4.配置模板引擎 consolidate
// 输出类型：.html、xml、pdf...
server.set('view engine', 'html') // server.set('视图引擎', '类型')
// 模板文件目录：./views
server.set('views', './views')
// 使用模板引擎类型：ejs、jade...
server.engine('html', consolidate.ejs)

// #### 用户请求 (req.query, req.body, req.cookies, req.session)

// 首页：查询banner数据
server.get('/', (req, res, next) => {
  db.query('SELECT * FROM `banner_table`', (err, data) => {
    if (err) {
      res.status(500).send('database error').end()
    } else {
      res.banners = data    // banner传递数据
      next()
    }
  })
})

// 首页：查询news数据
server.get('/', (req, res, next) => {
  // console.log(res.banners)
  db.query('SELECT id, title, summary FROM `article_table`', (err, data) => {
    if (err) {
      res.status(500).send('database error').end()
    } else {
      res.articles = data    // news传递数据
      next()
    }
  })
})

// 首页：render输出到页面
server.get('/', (req, res) => {
  res.render('index.ejs', { banners: res.banners, articles: res.articles })
})

// 详情页：
server.get('/article', (req, res) => {
  if (req.query.id) {
    if (req.query.act === 'like') {
      // 增加赞
      // UPDATE 表 SET 字段=值
      db.query(`UPDATE article_table SET n_like=n_like + 1 WHERE id=${req.query.id}`, (err, data) => {
        if (err) {
          console.log(err, '这里好多东西是否有对')
          res.status(500).send('数据库有问题').end()
        } else {
          // 显示文章
          db.query('SELECT * FROM `article_table` WHERE id=' + req.query.id, (err, data) => {
            if (err) {
              res.status(500).send('数据库有问题').end()
            } else {
              if (data.length) {
                // res.status(200)
                let tempData = data[0]
                tempData.sDate = common.time2date(tempData.post_time)
                res.render('conText.ejs', { article_data: tempData })
              } else {
                res.status(404).send('该文章未找到').end()
              }
            }
          })
        }
      })
    } else {
      // 显示文章
      db.query('SELECT * FROM `article_table` WHERE id=' + req.query.id, (err, data) => {
        if (err) {
          res.status(500).send('数据库有问题').end()
        } else {
          if (data.length) {
            // res.status(200)
            let tempData = data[0]
            tempData.sDate = common.time2date(tempData.post_time)
            res.render('conText.ejs', { article_data: tempData })
          } else {
            res.status(404).send('该文章未找到').end()
          }
        }
      })
    }
  } else {
    res.status(404).send('您请求的文章找不到').end()
  }
})

// 5、static数据(www目录文件)
server.use(expressStatic('./www'))
 
